package es.ucm.fdi.isbc.viviendas.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.swing.JFileChooser;

public class LectorCiudades {
        public static void main(String[] args) throws IOException
        {
                JFileChooser j=new JFileChooser();
                j.showOpenDialog(null);
                File archivo = j.getSelectedFile();
                System.out.println(archivo.getAbsolutePath());
                FileReader fr = new FileReader (archivo);
                BufferedReader br = new BufferedReader(fr);
                String linea = br.readLine();

                ArrayList<String> valor=null;
                HashMap<String,ArrayList<String>> tablaPorMunicipio=new HashMap<String,ArrayList<String>>();
                HashMap<String,ArrayList<String>> tablaPorZona=new HashMap<String,ArrayList<String>>();
                HashMap<String,String> tablaPorBarrio=new HashMap<String,String>();
                
                while(linea!=null)
                {
                		/*parto la linea em trozos separados por #*/
                        String [] campos = linea.split("#");
                        
                        /*cojo el trozo de la localizacion*/
                        String localizacion=campos[2];
                        
                        /*separo partes por /*/
                        String[] ruta=localizacion.split("/");
                        
                        /*recojo cada parte en una variable independiente*/
                        
                        String municipio="";
                        String zona="";
                        String barrio="";
                        
                        int longitudRuta=ruta.length;
                        municipio=ruta[1];
                        if(longitudRuta>2)
                        {
                        	zona=ruta[2];
                        }
                        else
                        {
                        	zona="";
                        }
                        
                        if(longitudRuta>3)
                        {
                        	barrio=ruta[3];
                        }
                        else
                        {
                        	barrio="";
                        }
                        
                        /*meto valores en las tablas si no existen en ellas*/
                        if(!tablaPorMunicipio.containsKey(municipio))
                        {
                        	valor=new ArrayList<String>();
                        	tablaPorMunicipio.put(municipio, valor);
                        }
                        if(!tablaPorZona.containsKey(zona))
                        {
                        	valor=new ArrayList<String>();
                        	tablaPorZona.put(zona,valor);
                        }
                        if(!tablaPorBarrio.containsKey(barrio))
                        {
                        	tablaPorBarrio.put(barrio, barrio);
                        }
                        
                        /*meto nuevo valor encontrado*/
                        
                        if(!zona.equals(""))
                        {
	                        valor=tablaPorMunicipio.get(municipio);
	                        if(!valor.contains(zona))
	                        {
	                        	valor.add(zona);
	                        }
	                        tablaPorMunicipio.put(municipio, valor);
                		}
                        if(!zona.equals("")&&!barrio.equals(""))
                        {
                        	valor=tablaPorZona.get(zona);
                        	if(!valor.contains(barrio))
                        	{
                        		valor.add(barrio);
                        	}
                        	tablaPorZona.put(zona, valor);
                        }
                        
                        if(!barrio.equals(""))
                        {
                        	tablaPorBarrio.put(barrio, barrio);
                        }
                        
                        linea = br.readLine();
                }
                linea=null;
                String sFichero = "filtros.txt";
                //File fichero = new File(sFichero);
                BufferedWriter bw = new BufferedWriter(new FileWriter(sFichero));
                linea=tablaPorMunicipio.toString()+"\n";
                bw.write(linea);
                linea=tablaPorZona.toString()+"\n";
                bw.write(linea);
                linea=tablaPorBarrio.toString()+"\n";
                bw.write(linea);
                bw.close();
                
                sFichero = "municipios.txt";
                //File fichero = new File(sFichero);
                bw = new BufferedWriter(new FileWriter(sFichero));
                Set<String> claves=tablaPorMunicipio.keySet();
                Iterator<String> it=claves.iterator();
                while(it.hasNext())
                {
                	linea=(String)it.next()+"\n";
                	bw.write(linea);
                }
                bw.close();
        }

}